package com.zhongwang.mms.module.purchase.dao;/**
 * 项目名称（软件名称）：忠旺机械物资管理系统(mms)
 * 研发设计单位：忠旺机械设备制造有限公司机械设计院智能控制设计科设计与研发。
 * 版权所有：忠旺机械设备制造有限公司
 * 注：本项目的一切技术专利，使用规范归解释权由忠旺机械设备制造有限公司所有。
 * 软件版本：Ver 1.0.0
 * 文件路径：com.zhongwang.mms.module.purchase.dao
 * 创建时间：2020年04月11日 16时55分
 **/

import com.zhongwang.mms.common.JsonResult;
import com.zhongwang.mms.gen.entity.*;
import com.zhongwang.mms.module.purchase.model.*;
import com.zhongwang.mms.module.purchase.model.proInv.PInventoryModel;
import com.zhongwang.mms.module.purchase.model.proInv.PProjectInventoryMarkModel;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @InterfaceName： PurInvProDao
 * @Description： 库存划项目数据持久层
 * @Author： 徐一贺
 * @Date： 2020/4/11 16:55
 * @Version： V1.0
 **/
@Repository
public interface PurInvProDao {
    /**
     *@FunctionName: findChangePlanList
     *@Description: 获取串料列表
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 12:44
     *@Phone: 18241927380
     *@Version: 1.0.0
     */
    List<ChangeModel> findChangePlanList(ChangeModel queryModel);

    /**
     *@FunctionName: getBReportPlanPrimaryKey
     *@Description: 根据主键获取计划信息
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 12:45
     *@Phone: 18241927380
     *@Version: 1.0.0
     */
    BReportPlan getBReportPlanPrimaryKey(Integer ceoRppId);

    /**
     *@FunctionName: getInventoryPrimaryKey
     *@Description: 根据主键获取库存信息
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 13:08
     *@Phone: 18241927380
     *@Version: 1.0.0
     */
    PInventory getInventoryPrimaryKey(Integer ipmBeforeItyId);
    /**
     *@FunctionName: findLastCCOrderCode
     *@Description: 获取最后编码
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 13:08
     *@Phone: 18241927380
     *@Version: 1.0.0
     */
    String findLastCCOrderCode();

    /**
     *@FunctionName: insertSelective
     *@Description: 选择插入数据
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 14:15
     *@Phone: 18241927380
     *@Param: pChangeOrder 插入的数据
     *@Version: 1.0.0
     */
    void insertSelective(PInventoryProjectMarkModel pInventoryProjectMarkModel);

    PChangeOrder getPChangeOrderByRppId(Integer ceoRppId);

    void updateSelective(PInventoryProjectMarkModel param);



    /**
     *@FunctionName: getPInventory
     *@Description: 根据需求的库存信息主键查找库存信息
     *@Author: 徐一贺
     *@CreateDate: 2020/4/18 10:09
     *@Phone: 18241927380
     *@Param: [ceoUseItyId] 需求的库存信息主键
     *@Return: [pInventory] 查找到了库存信息
     *@Version: 1.0.0
     */
    PInventory findInventoryByParam(Integer ceoUseItyId);

    /**
     *@FunctionName: getTProjectByProCode
     *@Description: 根据项目号获取本系统项目信息
     *@Author: 徐一贺
     *@CreateDate: 2020/4/18 10:28
     *@Phone: 18241927380
     *@Param: [ityProCode] 项目号
     *@Return: [TProject] 本系统项目信息
     *@Version: 1.0.0
     */
    TProject getTProjectByProCode(String ityProCode);

    /**
     *@FunctionName: findVWProjectByLikeCode
     *@Description: 根据项目号模糊查询获取看板系统项目信息与本地系统项目状态列表
     *@Author: 徐一贺
     *@CreateDate: 2020/4/18 12:53
     *@Phone: 18241927380
     *@Param: [param] 包含项目号实体类
     *@Return: [List<VWProject>] 项目看板系统列表信息
     *@Version: 1.0.0
     */
    List<VWProject> findVWProjectByLikeCode(VWProject param);

    /**
     *@FunctionName: findVWProjectByCode
     *@Description: 根据项目号查询看板系统中是否包含此项目号
     *@Author: 徐一贺
     *@CreateDate: 2020/4/18 12:53
     *@Phone: 18241927380
     *@Param: [param] 包含项目号实体类
     *@Return: [VWProject] 根据项目号查询看板系统中是否包含此项目号
     *@Version: 1.0.0
     */
    VWProject findVWProjectByCode(VWProject param);


    /**
     *@FunctionName: findChangeOrderListByQuery
     *@Description: 根据条件号查询串料标记执行表列表数据
     *@Author: 徐一贺
     *@CreateDate: 2020/4/20 14:54
     *@Phone: 18241927380
     *@Param: [queryModel] 查询条件
     *@Return: [List<PChangeOrderModel>] 串料单标记列表
     *@Version: 1.0.0
     */
    List<PInventoryProjectMarkModel> findPInventoryProjectMarkListByQuery(PInventoryProjectMarkQueryModel queryModel);
    /**
     *@FunctionName: findChangeOrderExecListByQuery
     *@Description: 获取库存划项目执行列表
     *@Author: 徐一贺
     *@CreateDate: 2020/4/21 19:43
     *@Phone: 18241927380
     *@Param: [queryModel] 检索参数
     *@Return: [List<ChangeModel>] 串料执行列表
     *@Version: 1.0.0
     */
    List<PInventoryProjectMarkModel> findPInventoryProjectMarkExecListByQuery(PInventoryProjectMarkQueryModel queryModel);

    /**
     *@FunctionName: updatePChangeOrderCeoAppyStatusByCeoId
     *@Description: 根据主键修改申请状态
     *@Author: 徐一贺
     *@CreateDate: 2020/4/21 12:45
     *@Phone: 18241927380
     *@Param: [param] 主键与申请状态载体
     *@Version: 1.0.0
     */
    void updatePChangeOrderCeoAppyStatusByCeoId(PInventoryProjectMarkModel param);
    /**
     *@FunctionName: updatePChangeOrderCeoAppyStatusByCeoId
     *@Description: 根据主键修改申请状态
     *@Author: 徐一贺
     *@CreateDate: 2020/4/21 12:45
     *@Phone: 18241927380
     *@Param: [param] 主键与申请状态载体
     *@Version: 1.0.0
     */
    void updatePChangeOrderCeoApplyStatusByCeoId(PInventoryProjectMarkModel param);

    /**
     *@FunctionName: findPChangeOrderByCeoId
     *@Description: 根据主键获取申请列表
     *@Author: 徐一贺
     *@CreateDate: 2020/4/21 20:33
     *@Phone: 18241927380
     *@Param: [ceoIds] 主键们
     *@Return: [List<PChangeOrderModel>] 申请列表
     *@Version: 1.0.0
     */
    List<PInventoryProjectMarkModel> findPInventoryProjectMarkByCeoId(String ceoIds);
    /**
     *@FunctionName: uppdateBReportPlanRppIsFlagByPrimaryKey
     *@Description: 根据主键更新计划标识
     *@Author: 徐一贺
     *@CreateDate: 2020/5/6 19:37
     *@Phone: 18241927380
     *@Param: [bReportPlan] 计划标识
     *@Return: [void] 空
     *@Version: 1.0.0
     */
    void uppdateBReportPlanRppIsFlagByPrimaryKey(BReportPlan bReportPlan);
    /**
     *@FunctionName: getPInventoryProjectMarkModelAndItyAvaNum
     *@Description: 获取库存划项目信息以及处理后（现库存可用数量+标记数量）的可用数量
     *@Author: 徐一贺
     *@CreateDate: 2020/5/14 13:26
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Version:
     */
    PInventoryProjectMarkModel getPInventoryProjectMarkModelAndItyAvaNum(Integer ipmId);

    /**
     *@FunctionName: updatePInventoryProjectMarkModelByPrimaryKeySelective
     *@Description: 根据主键选择性更新
     *@Author: 徐一贺
     *@CreateDate: 2020/5/14 14:09
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Version:
     */
    void updatePInventoryProjectMarkModelByPrimaryKeySelective(PInventoryProjectMarkModel changeModel);

    /**
     *@FunctionName: deleteByPrimaryKey
     *@Description: 根据主键删除数据
     *@Author: 徐一贺
     *@CreateDate: 2020/5/14 14:25
     *@Phone: 18241927380
     *@Param: [ipmId] 主键
     *@Version: 1.0.0
     */
    void deleteByPrimaryKey(PInventoryProjectMarkModel param);

    /**
     *@FunctionName: getInvProCountByItyId
     *@Description: 获取已执行的库存划项目次数
     *@DesignIdea: 请填写设计思想
     *@Author: 徐一贺
     *@CreateDate: 2020/6/22 12:54
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    Integer getInvProCountByItyId(Integer ityId);
    /**
     *@FunctionName: createPInventoryProjectMarkExecListTempTable
     *@Description: 创建临时表
     *@DesignIdea: 请填写设计思想
     *@Author: 徐一贺
     *@CreateDate: 2020/6/30 10:55
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    void createPInventoryProjectMarkExecListTempTable(PInventoryProjectMarkQueryModel param);

    /**
     *@FunctionName: getTempTableDataCount
     *@Description: 获取临时表数据行数
     *@DesignIdea: 获取临时表数据行数
     *@Author: 徐一贺
     *@CreateDate: 2020/6/30 10:57
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    Integer getTempTableDataCount(PInventoryProjectMarkQueryModel param);
    /**
     *@FunctionName: selectPInventoryProjectMarkExecListTempTableByParam
     *@Description: 根据条件查询临时表
     *@DesignIdea: 请填写设计思想
     *@Author: 徐一贺
     *@CreateDate: 2020/6/30 11:00
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version:
     */
    List<PInventoryProjectMarkModel> selectPInventoryProjectMarkExecListTempTableByParam(PInventoryProjectMarkQueryModel param);

    /**
     *@FunctionName: dropPInventoryProjectMarkExecListTempTable
     *@Description: 删除临时内存表
     *@DesignIdea: 删除临时内存表
     *@Author: 徐一贺
     *@CreateDate: 2020/6/30 11:01
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    void dropPInventoryProjectMarkExecListTempTable(String tempTableName);

    /**
     *@FunctionName: updateReject
     *@Description: 驳回
     *@DesignIdea: 驳回
     *@Author: 徐一贺
     *@CreateDate: 2020/6/30 11:01
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    void updateReject(PInventoryProjectMarkModel pInventoryProjectMarkModel);

    /**
     * 根据项目号获取成本中心实体类
     * @param code
     * @return
     */
    TCost getTCostByCode(String code);
}
